package com.xbongbong.paas.service;

import com.xbongbong.paas.pojo.dto.SmsCronTabAsyncDTO;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.pro.sms.pojo.dto.SmsAvailableCountDTO;
import com.xbongbong.pro.sms.pojo.dto.SmsCancelSendDTO;
import com.xbongbong.pro.sms.pojo.dto.SmsImportExcelResultDTO;
import com.xbongbong.pro.sms.pojo.dto.SmsLogListDTO;
import com.xbongbong.pro.sms.pojo.dto.SmsLogStatisticDTO;
import com.xbongbong.pro.sms.pojo.dto.SmsRabbitMqDTO;
import com.xbongbong.pro.sms.pojo.dto.SmsSendTemplateListDTO;
import com.xbongbong.pro.sms.pojo.dto.SmsUpdateStatusDTO;
import com.xbongbong.pro.sms.pojo.vo.SmsCancelSendVO;
import com.xbongbong.pro.sms.pojo.vo.SmsGetAvailableCountVO;
import com.xbongbong.pro.sms.pojo.vo.SmsImportExcelResultVO;
import com.xbongbong.pro.sms.pojo.vo.SmsLogListVO;
import com.xbongbong.pro.sms.pojo.vo.SmsLogStatisticVO;
import com.xbongbong.pro.sms.pojo.vo.SmsSendTemplateListVO;
import com.xbongbong.pro.sms.pojo.vo.SmsUpdateStatusVO;

/**
 * @description:
 * @Author: hongxiao
 * @date: 2019-01-18 15:20
 */
public interface SmsSendService {
    /**
     * 获取可用短信数
     * @param smsAvailableCountDTO 入参
     * @return
     *
     * @author hongxiao
     * @date: 2019-01-25 19:45
     * @since v1.0
     * @version v1.0
     */
    SmsGetAvailableCountVO getAvailableCount(SmsAvailableCountDTO smsAvailableCountDTO) throws XbbException;

    /**
     * 获取发送短信可用的短信模板列表
     * @param smsSendTemplateListDTO 入参
     * @return
     * @throws
     *
     * @author hongxiao
     * @date: 2019-01-28 15:25
     * @since v1.0
     * @version v1.0
     */
    SmsSendTemplateListVO templateList(SmsSendTemplateListDTO smsSendTemplateListDTO) throws XbbException;

    /**
     * 发送短信
     * @param smsRabbitMqDTO 入参
     * @throws XbbException
     * @author hongxiao
     * @date: 2019-01-25 19:45
     * @since v1.0
     * @version 1.0
     */
    void send(SmsRabbitMqDTO smsRabbitMqDTO) throws XbbException;

    /**
     * 客户或联系人列表发送短信
     * @param smsRabbitMqDTO 入参
     * @return
     * @throws XbbException
     * @author hongxiao
     * @date: 2019-01-25 19:46
     * @since v1.0
     * @version v1.0
     */
    void sendForBusiness(SmsRabbitMqDTO smsRabbitMqDTO) throws XbbException;

    /**
     * 获取导入短信接收人数据结果
     * @param smsImportExcelResultDTO 入参
     * @return
     *
     * @author hongxiao
     * @date: 2019-01-25 19:57
     * @since v1.0
     * @version v1.0
     */
    SmsImportExcelResultVO importExcelResult(SmsImportExcelResultDTO smsImportExcelResultDTO) throws XbbException;

    /**
     * 取消定时发送
     * @param smsCancelSendDTO 入参
     * @return
     *
     * @author hongxiao
     * @date: 2019-01-25 19:58
     * @since v1.0
     * @version v1.0
     */
    SmsCancelSendVO cancelSend(SmsCancelSendDTO smsCancelSendDTO) throws XbbException;

    /**
     * 重发短信
     * @param smsRabbitMqDTO 入参
     * @return
     * @throws XbbException
     * @author hongxiao
     * @date: 2019-01-25 19:59
     * @since v1.0
     * @version v1.0
     */
    void resend(SmsRabbitMqDTO smsRabbitMqDTO) throws XbbException;

    /**
     * 获取短信日志列表
     * @param smsLogListDTO 入参
     * @return
     *
     * @author hongxiao
     * @date: 2019-01-25 19:59
     * @since v1.0
     * @version v1.0
     */
    SmsLogListVO logList(SmsLogListDTO smsLogListDTO) throws XbbException;

    /**
     * 获取短信日志统计
     * @param smsLogStatisticDTO 入参
     * @return
     *
     * @author hongxiao
     * @date: 2019-01-25 20:00
     * @since
     * @version
     */
    SmsLogStatisticVO logStatistic(SmsLogStatisticDTO smsLogStatisticDTO) throws XbbException;

    /**
     * 通过crontab定时任务每十分钟不停的拉取并更新短信状态
     * @param updateStatusDTO 入参
     * @return
     * @author youli.chen
     * @since
     * @version
     */
    SmsUpdateStatusVO cronTabUpdateStatus(SmsUpdateStatusDTO updateStatusDTO) throws XbbException;

    /**
     * 短信定时任务脚本异步方法
     *
     * @param smsCronTabAsyncDTO 客户公海规则脚本入参
     * @return Integer
     * @throws XbbException 业务异常
     * @version v1.0
     * @since v1.0
     */
    void updateSmsStatusAsync(SmsCronTabAsyncDTO smsCronTabAsyncDTO) throws XbbException;

    /**
     * 查询短信余额
     * @param smsRabbitMqDTO 入参
     * @throws XbbException
     * @author hongxiao
     * @date: 2019-01-25 19:45
     * @since v1.0
     * @version 1.0
     */
    void getBalance() throws XbbException;
}
